package logika;

/**
 *  Třída PrikazJdi implementuje pro hru příkaz jdi.
 *  Tato třída je součástí jednoduché textové hry.
 *  
 *@author     Jarmila Pavlickova(základní funkčnost) + Tomáš Koválik(hlídaná a nebezpečná místnost)
 *@version    1.0
 */
class PrikazJdi implements IPrikaz {
    private static final String NAZEV = "jdi";
    private Hra hra;

    /**
     *  Konstruktor třídy
     *  
     *  @param plan herní plán, ve kterém se bude ve hře "chodit" 
     */    
    public PrikazJdi(Hra hra) {
        this.hra = hra;
    }

    /**
     *  Provádí příkaz "jdi". Zkouší se vyjít do zadané místnosti. Pokud místnost
     *  existuje, vstoupí se do nové místnosti. Pokud zadaná sousední
     *  místnosti (východ) není, vypíše se chybové hlášení.
     *
     *@param parametry - jako  parametr obsahuje jméno místnosti,
     *                         do které se má jít.
     *@return zpráva, kterou vypíše hra hráči
     */ 
    @Override
    public String proved(String... parametry) {
        if (parametry.length == 0) {
            // pokud chybí druhé slovo (sousední místnost), tak ....
            return "Kam mám jít? Musíš zadat jméno místnosti";
        }

        String smer = parametry[0];

        // zkoušíme přejít do sousední místnosti
        HerniPlan plan = hra.getHerniPlan();
        Prostor aktProstor = plan.getAktualniProstor();
        Prostor sousedniMistnost = plan.getAktualniProstor().vratSousedniProstor(smer);
        Batoh batoh = plan.getBatoh();

        if (sousedniMistnost == null) {
            return "Tam se odsud jit neda!";
        }
        else {

            if (sousedniMistnost.jeZamceno ()) {
                return "dveře do místnosti "+sousedniMistnost.getNazev()+" jsou zamčené";
            }
            if (sousedniMistnost.jeNebezpecna()){
                if(plan.getBatoh().obsahujeVec(sousedniMistnost.getKlic().getNazev())){
                    sousedniMistnost.nebezpeci(false);
                    plan.setAktualniMistnost(sousedniMistnost);
                    batoh.odeberVec(sousedniMistnost.getKlic().getNazev());
                    return "Tak tady mi již žádné nebezpěčí nehrozí\n"+sousedniMistnost.dlouhyPopis();                
                }
                else{
                    hra.setKonecHry(true);
                    return "Obranný systém stanice tě roztřílel na kaši. Hra končí...";
                }
            }
            else if(sousedniMistnost.jeHlidana()) {
                if(plan.getBatoh().obsahujeVec(sousedniMistnost.getKlic().getNazev()) && sousedniMistnost.getKlic().jeRozbita()) {
                   return "S peprnými nadávkami jsi byl hlídačem vyhozen...budeš potřebovat zbraň...máš ji rozbitou!!";
                }
                else if(plan.getBatoh().obsahujeVec(sousedniMistnost.getKlic().getNazev())==false){
                   return "S peprnými nadávkami jsi byl hlídačem vyhozen...budeš potřebovat zbraň...";
                }
                else{
                    sousedniMistnost.hlidat(false);
                    plan.setAktualniMistnost(sousedniMistnost);
                    return "Tak a hlídač má z hlavy prejt!!\n"+sousedniMistnost.dlouhyPopis();
                }
            }
            plan.setAktualniMistnost(sousedniMistnost);
            return sousedniMistnost.dlouhyPopis();
        }

    }

    /**
     *  Metoda vrací název příkazu (slovo které používá hráč pro jeho vyvolání)
     *  
     *  @ return nazev prikazu
     */
    @Override
    public String getNazev() {
        return NAZEV;
    }
}
